Computing devices, such as a computer, usually include software to provide a variety of functions to a user. For example, the computing device may include software such as an operating system or application programs that assist users in composing or editing an electronic document, importing digital photos or audio recordings from an external device (e.g., an MP3 player), browsing media content on a network (e.g., the Internet), and/or playing games.
With new or more advanced technologies becoming available everyday, the user may wish to replace an old computing device with a new computing device. While the new computing device may already include software, the user frequently wishes to move the software in the existing computing device to the new computing device without the hassle of installing programs on the new computing device. For example, suppose the user wishes to move video game programs from the existing computing device to the new computing device. While a clean or new installation of the video game program on the new computing device still enables the user to operate the video games on the new computing device, some configurable data (e.g., highest scorer or longest football game passing yards) in the existing computing device is not included in the clean or new installation of the games on the new computing device. This deficiency frustrates the user and further adversely affects the user experience on the new computing device.
Also, many people find it hard to replace an old computing device with a new one, because they may have misplaced installation CDs for their software programs, or have deleted the original install packages for downloaded programs. Many programs keep their binary data and settings spread throughout the system across various data stores (i.e. memory areas), which makes it very impractical for a user to attempt to transfer programs manually. For example, some large application programs install over 30,000 unique registry entries as part of the program. Trying to locate and move these entries manually is almost impossible.
Current migration systems enable the user to migrate settings or files from one computing device to another computing device, using static knowledge built into the migration system. Before migrating a program's settings, these migration systems are “hard coded” to identify and migrate a program and/or its settings through experimentation with an existing program. For example, to migrate a particular application's settings, a migration developer first installs it, modifies its settings, and uses a special tool to understand what effect the settings modification had on the system. This knowledge is then converted into a “script” or “hard coded” knowledge, which the migration system can use to migrate applications and/or their settings when it sees the same exact program on a source computer.
Another approach when moving programs and settings is to attempt to move “everything at once”, and hope it works on the destination system. The problem with this approach is that because it is not a componentized approach, it will often fail if there are any existing applications on the destination machine. For example, if one were to try and move all programs from the source machine, and apply it to a machine which already had a new version of some of the programs, this approach would produce a disastrous result, because it would overwrite newer versions of files with older ones.
Other systems performing migration of application programs require installing a monitoring or tracking program to monitor or track any application program installed after the monitoring program is installed. If any existing application programs were installed before the monitoring program is installed, these systems would not be able to allow users to perform an effective migration of these existing application programs.